package org.base23.video.service;

import org.base23.commons.domain.dto.PageResult;
import org.base23.commons.domain.dto.PageQueryParam;
import org.base23.video.domain.dto.CreateAnalysisResultParam;
import org.base23.video.domain.dto.UpdateAnalysisResultParam;
import org.base23.video.domain.dto.UserAnalysisResultDTO;
import org.base23.video.domain.entity.UserAnalysisResult;

import java.util.List;

/**
 * 用户分析结果服务接口
 */
public interface UserAnalysisResultService {

    /**
     * 创建分析结果
     */
    Long createAnalysisResult(CreateAnalysisResultParam param);

    /**
     * 根据ID查询分析结果
     */
    UserAnalysisResultDTO getAnalysisResultById(Long id);

    /**
     * 根据用户ID和结果ID查询
     */
    UserAnalysisResultDTO getAnalysisResultByUserIdAndResultId(Long userId, String resultId);

    /**
     * 根据用户ID分页查询分析结果
     */
    PageResult<UserAnalysisResultDTO> pageQueryByUserId(Long userId, PageQueryParam pageParam);

    /**
     * 根据用户ID查询所有分析结果
     */
    List<UserAnalysisResultDTO> getAnalysisResultsByUserId(Long userId);

    /**
     * 根据用户ID和运动类型查询分析结果
     */
    List<UserAnalysisResultDTO> getAnalysisResultsByUserIdAndSportType(Long userId, String sportType);

    /**
     * 更新分析结果
     */
    void updateAnalysisResult(UpdateAnalysisResultParam param);

    /**
     * 删除分析结果
     */
    void deleteAnalysisResult(Long id);

    /**
     * 批量删除分析结果
     */
    void batchDeleteAnalysisResults(List<Long> ids);

    /**
     * 检查分析结果是否属于指定用户
     */
    boolean checkOwnership(Long id, Long userId);

    /**
     * 完成分析并更新结果
     */
    void completeAnalysis(Long userId, String resultId, String analysisDataJson, String summary);
} 